package main

import(
	"fmt"
	"reflect"
)

//定义一个结构体
type Student struct{
	Name string
	Age int
}

//给结构体绑定方法：
func (s Student) CPrint(){
	fmt.Println("调用了Student的Print方法")
	fmt.Println("学生的姓名是",s.Name)
}

func (s Student) AGetSum(n1,n2 int) int{
	fmt.Println("调用了Student的AGetSum方法")
	return n1 + n2
}

func (s Student) BSet(name string,age int){
	s.Name = name
	s.Age = age
}

//定义函数操作结构体进行反射操作：
func TestStudentStruct(a interface{}){
	//a转成reflect.ValueOf()
	refValue := reflect.ValueOf(a)
	fmt.Println(refValue)

	n := refValue.Elem().NumField()	//输出字段的数量
	fmt.Println(n)

	//修改字段的值：
	refValue.Elem().Field(0).SetString("hui")
	refValue.Elem().Field(1).SetInt(33)
}

func main(){
	//定义结构体具体实例
	s := Student{
		Name : "Lee",
		Age : 32,
	}

	TestStudentStruct(& s)
	fmt.Println(s)
}